// 为权限编辑按钮绑定单击事件
function fillAuthTree() {
    $("#rolePageBody").on("click", ".checkBtn", function () {
        // 打开模态框
        $("#assignModal").modal("show");

        // 将roleId存入全局变量
        window.roleId = this.id;

        // 发送请求，获取数据
        var ajaxReturn = $.ajax({
            "url": "assign/get/all/auth.json",
            "type": "post",
            "dataType": "json",
            "async": false
        });

        if (ajaxReturn.status != 200) {
            layer.msg("请求失败，状态码是：" + ajaxReturn.status + "  状态说明是：" + ajaxReturn.statusText);
            return;
        }

        // 将获取的数据转换为JSON，然后包装到ztree中显示
        var authList = ajaxReturn.responseJSON.data;

        var setting = {
            data: {
                simpleData: {
                    // 开启简单JSON功能，这样使得ztree可以自动识别和包装JSON中的关系树
                    enable: true,
                    // 使用 categoryId 属性关联父节点，不用默认的 pId 了
                    pIdKey: "categoryId"
                },
                key: {
                    // 使用 categoryId 属性关联父节点，不用默认的 pId 了
                    name: "title"
                }
            },
            check: {
                // 设置 zTree 的节点上是否显示 checkbox / radio
                enable: true
            }
        };

        // ztreez初始化
        $.fn.zTree.init($("#authTreeDemo"), setting, authList);

        var treeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
        //将节点全部展开
        treeObj.expandAll(true);

        // 获取当前角色所被赋予权限的authId
        ajaxReturn = $.ajax({
            "url": "assign/get/assign/auth/id/by/role/id.json",
            "type": "post",
            "data": {
                "roleId": window.roleId
            },
            "dataType": "json",
            "async": false
        });
        if (ajaxReturn.status != 200) {
            layer.msg("请求失败，状态码是：" + ajaxReturn.status + "  状态说明是：" + ajaxReturn.statusText);
            return;
        }

        var authIdArray = ajaxReturn.responseJSON.data;

        // 遍历authId的数组
        for (var i = 0; i < authIdArray.length; i++) {
            var authId = authIdArray[i];

            // ztree的节点id就是authid，根据authid获取的节点都是应该被选中的节点
            var treeNode = treeObj.getNodeByParam("id", authId);

            // 设置是否被选中
            var checked = true;

            // checkTypeFlag 设置为 false，表示不“联动”，不联动是为了避免把不该勾选的勾选上
            var checkTypeFlag = false;
            treeObj.checkNode(treeNode, checked, checkTypeFlag);
        }
    });

}


// 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
function generatePage() {

    // 1.获取分页数据
    var pageInfo = getPageInfoRemote();

    // 2.填充表格
    fillTableBody(pageInfo);
}

// 远程访问服务器端程序，获取pageInfo数据
function getPageInfoRemote() {

    // 调用$.ajax()函数发送请求并接收该函数的返回值
    var ajaxResult = $.ajax({
        "url": "role/get/page/info.json",
        "type": "post",
        "data": {
            "pageNum": window.pageNum,
            "pageSize": window.pageSize,
            "keyword": window.keyword
        },
        "dataType": "json",
        "async": false
    });

    // console.log(ajaxResult);
    var statusCode = ajaxResult.status;

    // 如果发生错误，显示提示消息
    if (statusCode != 200) {
        layer.msg("服务器程序调用失败，状态码：" + statusCode + ",说明信息：" + ajaxResult.statusText);
        return null;
    }

    // 如果响应状态码为200，说明请求处理成功，获取pageInfo
    var resultEntity = ajaxResult.responseJSON;

    // 从resultEntity中获取result属性
    var result = resultEntity.result;

    // 判断result是否成功
    if (result == "FAILED") {
        layer.msg(resultEntity.message);
        return null;
    }

    // 确认result为成功后获取pageInfo
    var pageInfo = resultEntity.data;
    return pageInfo;

}

// 填充表格
function fillTableBody(pageInfo) {

    // 清除旧数据
    $("#rolePageBody").empty();

    // 没有数据结果的时候，清空导航条
    $("#Pagination").empty();

    if (pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0) {
        $("#rolePageBody").append("<tr><td colspan='4'>抱歉！没有查询到数据</td></tr>")
        return;
    }

    // 使用pageInfo中的list填充body
    for (var i = 0; i < pageInfo.list.length; i++) {
        var role = pageInfo.list[i];
        var roleId = role.id;
        var roleName = role.name;

        var numberTd = "<td>" + (i + 1) + "</td>";
        var checkboxTd = "<td><input id='" + roleId + "' type='checkbox' class='itemBox' name='checkBox'></td>";
        var nameTd = "<td>" + roleName + "</td>";

        var checkBtn = "<button id='" + roleId + "' type='button' class='btn btn-success btn-xs checkBtn'><i class=' glyphicon glyphicon-check'></i></button>";
        var pencilBtn = "<button id='" + roleId + "' type='button' class='btn btn-primary btn-xs pencilBtn'><i class=' glyphicon glyphicon-pencil'></i></button>";
        var removeBtn = "<button id='" + roleId + "' type='button' class='btn btn-danger btn-xs removeBtn'><i class=' glyphicon glyphicon-remove'></i></button>";
        var btnTd = "<td>" + checkBtn + " " + pencilBtn + " " + removeBtn + "</td>"

        var tr = "<tr>" + numberTd + checkboxTd + nameTd + btnTd + "</tr>";

        $("#rolePageBody").append(tr);
    }

    generateNavigator(pageInfo);
}

// 生成分页页码导航条
function generateNavigator(pageInfo) {
    var totalRecord = pageInfo.total;

    var properties = {
        "num_edge_entries": 3,                                // 边缘页数
        "num_display_entries": 5,                             // 主体页数
        "callback": paginationCallBack,                       // 回调函数
        "items_per_page": pageInfo.pageSize,                   // 每页显示几项
        "current_page": pageInfo.pageNum - 1,                      // 当前页数
        "prev_text": "上一页",
        "next_text": "下一页"
    };

    // 调用pagination函数
    $("#Pagination").pagination(totalRecord, properties);
}

// 翻页时的回调函数
function paginationCallBack(pageIndex, jQuery) {

    window.pageNum = pageIndex + 1;

    // 调用分页函数
    generatePage();

    // 取消超链接的跳转
    return false;
}


// 根据角色的ID数组进行多条删除
function delRoleByArray(roleArray) {

    // 显示模态框
    $("#delRoleDiv").modal("show");

    // 清空文本框
    $("#showRoleName").empty();

    // 初始化角色id数组，放入全局变量
    window.roleIdArray = [];
    for (var i = 0; i < roleArray.length; i++) {
        //依次从数组中取出role对象
        var role = roleArray[i];

        var id = role.id;
        // 将id存入roleIdArray
        window.roleIdArray.push(id);

        // 将roleName放入模态框中显示
        var name = role.name;
        $("#showRoleName").append(name + "<br/>")
    }
}

